Moodle 1.6

Moodle 1.5 については Moodle 参照。 Moodle 1.9 が現れた今でも,シンプルな Moodle 1.6 の需要はある。セキュリティパッチが出なくなるまでは使い続けても問題ない。

三重大学版は 三重大学版Moodleソース で配布中。

PHP と,MySQL または PostgreSQL が必要。 以下では Linux + Apache + MySQL + PHP の環境でインストール。

CentOS 4.5については,httpd,php,mysql,php-mysql,gd,php-gd,php-mbstring がなければ yum install で入れておく。 POP3/IMAPで認証するならphp-imapも。 確認していないがCentOSはRed Hat互換なので,RHELでも同じであろう。 Vine Linuxでも問題ない。 いずれにしてもこれらのLinuxならXAMPPを使う必要はない。 標準のパッケージを使うほうがyumやapt-getで更新できるので安心。

Apache

Apache 2.x の場合,httpd.conf に必ず AcceptPathInfo on を入れる。

MySQL

MySQL 4.1.16以上が必要。ただし4.1.21はMoodle(1.6以前だけ?)に影響するバグがある(Using Moodle: MySQL 4.1.21 Bug)。 CentOS 4.3はMySQL 4.1.20なのでちょうどいい。

MySQL 5については,strict modeでは動作しない: Using Moodle: 1101: BLOB/TEXT column 'sessdata' can't have a default value

次のようにしてデータベースを作っておく(データベース名 moodle,ユーザ名 moodleuser,Webサーバのホスト名 hostname,パスワード himitsu の場合)。

mysql -u root -p
create database moodle default character set utf8 collate utf8_unicode_ci; 
grant select,insert,update,delete,create,drop,index,alter on moodle.* 
  to moodleuser@'hostname' identified by 'himitsu'; 
quit 

Apache と MySQL が同居する場合は 'hostname' は localhost でよい。 そうでない場合は 'oku' あるいは 'oku.edu.mie-u.ac.jp' のようにする(単に 'oku' とするのは /etc/hosts に oku が oku.edu.mie-u.ac.jp より先に書いてある場合)。

PHP

php.ini は基本的にデフォルトのままでいい。 Moodle.org のサイトには次のようにすると書かれている:

magic_quotes_gpc = 1      (推奨)
magic_quotes_runtime = 0  (必ず)
file_uploads = 1
session.auto_start = 0
session.bug_compat_warn = 0

しかしうちはデフォルトのまま magic_quotes_gpc = off で使っている。 このほうが安全。 ただ,ファイルのアップロードの最大サイズが php.ini で

upload_max_filesize = 2M
post_max_size = 8M

となっているが,これはもう少し大きくしたほうがいい(10Mとか100Mとか)。 ついでにデフォルトの

memory_limit = 8M

でも動かないことはないが 16M くらいにしたほうが安心。

Moodle

Moodle をダウンロードして /var/www/html 以下に展開(以下では /var/www/html/moodle)。 これは当然ながら所有者は apache 以外にして,管理人以外には書き込み権限を与えない。

データ用ディレクトリを /var/www/html の外に設定。 以下では /var/www/moodledata とする。 ここは apache が読み書きできるようにする。 アップロードされたファイルはここに入る。

http://サーバ名/moodle/install.php をアクセスする。

質問に答えていけば設定ファイル config.php が作られるが,moodle ディレクトリに apache が書き込めないので,表示された config.php をコピーしてエディタにペーストし,moodle ディレクトリに保存する。 その際,

$CFG->unicodedb = true;
$CFG->unicodecleanfilename = true;

を追加する。

質問は「続く」でたくさんのページがあるが必ず最後まで答える。 質問中でURLが http://.../moodle のようになるが最後に / を補わないこと。

途中で「「日本語(ja)」言語パックをダウンロードする」ボタンが現れるので,通常はそれを利用すればよい。三重大学版の1.6(準備中)では言語パックも含んでいるので,ここはパスでよい。

詳細設定の画面は例えば次のようにする:

lang: 日本語(ja)
country: 日本
allowcoursethemes: Yes
sessioncookiepath: /moodle/  ←Moodleをインストールしたパス
sitemailcharset: ISO-2022-JP

あとは http://サーバ名/moodle/ をアクセスするだけ。

動作確認したら cron を設定する。 まず http://サーバ名/moodle/admin/cron.php をブラウザで見てうまく働くことを確認。 よければ一般ユーザでいいから crontab -e で次のように設定。

*/5 * * * * wget -q -O /dev/null http://サーバ名/moodle/admin/cron.php

既存Moodleからの移行

Moodle 1.4.xはMoodle 1.5.xに移行してから,Moodle 1.6.xに移行するのがいいらしい。

通常の更新と同様,ソースツリーを上書きしてすぐに管理者でアクセスする。 これでうまくいけばよいが,文字化けしているようなら,次のようにする。 あらかじめ /etc/my.cnf で mysqld の max_allowed_packet を十分大きくしておく(16Mとか)。

mysqldump --opt -u root -p --default-character-set=latin1 moodle >moodle.sql
iconv -c -f EUC-JP-MS -t UTF-8 moodle.sql >moodle1.sql
sed 's/\blatin1\b/utf8/g' moodle1.sql >moodle2.sql
diff moodle1.sql moodle2.sql (確認)
mysql -u root -p --default-character-set=utf8 --max_allowed_packet=16M moodle < moodle2.sql 

moodledataの移行もあるので,Moodle/UTF-8 を参照されたい。

以下では三重大版Moodleでの変更点の一部を挙げておく。

姓と名の順番が逆

名姓の順で聞いてくるので学生がほとんど逆に入れてしまって困った。 これを直す一番簡単な方法は,firstname を姓,lastname を名と訳すことである。 /var/www/moodledata/lang/ja_utf8/moodle.php の中で次のような変更をする。

$string['firstname'] = '姓';
$string['lastname'] = '名';
$string['fullnamedisplay'] = '$a->firstname $a->lastname';
$string['missingfirstname'] = '姓が入力されていません。';
$string['missinglastname'] = '名が入力されていません。';

あと,「$a->lastname さん、こんにちは」のような挨拶は $a->firstname に変える。

そもそもfirstnameは最初に表示される名前,lastnameは最後に表示される名前という意味なので,これらがgiven name,surnameに対応していなくていいではないか,という発想である。 繁体中文版Moodleもそのようになっている。 もっとも,すでにfirstnameにgiven nameを入れてしまっている,データベースをいじらないで済ませたいということであれば,ここは元通りにして,あちこちのソースをいじる必要がある。

姓名以外にも,lang/ja_utf8/moodle.phpは大学の状況に合わせていろいろ変更するといい。 例えば国,都道府県などは所属,学部などに変えることが考えられる。

ついでに,名前に「さん」付けしてくれないところがある。 これも変なので,うちでは

$string['san'] = ' さん';

を追加して,login/confirm.phpで

echo "<center><h3>".get_string("thanks").", ". fullname($user) . get_string("san") . "</h3>\n";

などのように「さん」付けしている。

メールの文字コードがおかしい

Moodle 1.6からは設定で sitemailcharset: ISO-2022-JP とできるようになった。 しかし,これでもquoted printableになったりして,メーラによってはまともに読めない。 直すにはいろいろな手があるが,例えば lib/moodlelib.php で if ($mail->Send()) { の直前に

   if (strcasecmp($mail->CharSet, 'ISO-2022-JP') == 0) {
       $mail->Encoding = '7bit';
   } else {
       $mail->Encoding = '8bit';
   }

を挿入する。さらに

   $user->mailformat = 1;  // Always send HTML version as well

の 1 を 0 にする。 また,lib/db/mysql.sql の

 `mailformat` tinyint(1) unsigned NOT NULL default '1',

の 1 を 0 にすればテキストメールがデフォルトになる。 ついでに,メールアドレス非公開をデフォルトにするには,同じファイルの

 `maildisplay` tinyint(2) unsigned NOT NULL default '2',

の 2 を 0 にする。 さらについでに,フォーラム投稿をメールで送らないをデフォルトにするには

 `autosubscribe` tinyint(1) unsigned NOT NULL default '1',

の 1 を 0 にする。 こうしておかないと携帯に転送している学生が泣くことになる。

すでにインストールされているMoodleで上記 lib/db/mysql/sql の変更の効果を出すためには,次のようにして設定を変更できる。

alter table mdl_user alter mailformat set default 0;
update mdl_user set mailformat=0;
alter table mdl_user alter maildisplay set default 0;
update mdl_user set maildisplay=0;
alter table mdl_user alter autosubscribe set default 0;
update mdl_user set autosubscribe=0;

日本語ファイル名が使えない

file.php に次のように挿入する:

   $filename = $args[count($args)-1];
   // 次の7行を挿入
   $ua = $_SERVER['HTTP_USER_AGENT'];
   if (strstr($ua, "MSIE") && !strstr($ua, 'Opera')) {
      $filename = mb_convert_encoding($filename, "SJIS-WIN", "UTF-8");
   } elseif (strstr($ua, "Safari")) {
      $filename = "";
   }
  $filename = str_replace('#', '%23', $filename);
   send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);

このあたり,もっと広範なOS・ブラウザでテストする必要あり。

フォーラムの最近の活動を新しい順に表示できないか

moodle/mod/forum/lib.php の 'time ASC' を 'time DESC' に直してください。


Last-modified: 2008-07-21 (月) 08:41:27 (4984d)